package com.naihe.anderson.sms.util;

import java.util.ArrayList;
import java.util.List;

import org.xml.sax.Attributes;
import org.xml.sax.SAXException;
import org.xml.sax.helpers.DefaultHandler;

import com.naihe.anderson.sms.entity.SignatureMsg;

public class SignatureXmlHandler extends DefaultHandler {

	List<SignatureMsg> signatureMsgs;
	private String tempString;
	private SignatureMsg signatureMsg;
	
	@Override
	public void startDocument() throws SAXException {
		signatureMsgs = new ArrayList<SignatureMsg>();
	}
	
	public List<SignatureMsg> getSignatureMsgList(){
		if(signatureMsgs == null)
			signatureMsgs = new ArrayList<SignatureMsg>();
		return signatureMsgs;
	}
	
	/** 
	 * sax 读取到元素节点的时候用到这个方法； 
	 */ 
	@Override
	public void startElement(String uri, String localName, String qName,
			Attributes attributes) throws SAXException {
		// 先判断读到的元素是否是UserInfo  
        if ("SignatureMsg".equals(localName)) {  
            // 如果读到的是UserInfo这个元素 就要保存起来，保存在我们创建的那个UserInfo的类中 所以我们要new一个UserInfo类  
        	signatureMsg = new SignatureMsg();  
            // attributes是属性。  
        	signatureMsg.setSignatureMsgId(Long.parseLong(attributes.getValue("signatureMsgId")));
        }
        tempString = localName;
	}
	
	/** 
	 * sax 读取到文本节点的时候调用了这个方法 
	 */ 
	@Override
	public void characters(char[] ch, int start, int length)
			throws SAXException {
		if (signatureMsg != null) {  
            String valueString = new String(ch, start, length);  
            if ("bodyMsg".equals(tempString)) {  
                // 如果当前解析到的节点是name 就要将name中的文本节点元素的值得到  
            	signatureMsg.setBodyMsg(valueString);
            } else if ("contactNumbers".equals(tempString)) {  
            	signatureMsg.setContactNumbers(valueString);
            } else if("signatureMsgStatut".equals(tempString)){
            	signatureMsg.setSignatureMsgStatut(Integer.parseInt(valueString));
            } else if("signatureMsgTime".equals(tempString)){
            	signatureMsg.setSignatureMsgTime(Long.parseLong(valueString));
            }
        }
	}
	
	/** 
	 * 这个方法是每次遇到结束的标签都会执行的 并不是只遇到最后的结尾才调用 
	 *  
	 * 读取完毕遇到userInfo'的结尾 就将封装好的一个userInfobean保存到list中 并且清空userInfo对象 
	 *  
	 */
	@Override
	public void endElement(String uri, String localName, String qName)
			throws SAXException {
		if("SignatureMsg".equals(localName) && signatureMsg !=null)  
        {  
			signatureMsgs.add(signatureMsg);
			signatureMsg = null;  
        }  
        tempString = null;
	}

	@Override
	public void endDocument() throws SAXException {
		// TODO Auto-generated method stub
		super.endDocument();
	}
}
